/* Глобальная структура, расположенная в SRAM */
struct structure_ram
{
char a; 		// Объявляем символьную переменную a
char b[10]; 	// Объявляем строковую переменную b
int c,d,e; 		// Объявляем целые переменные c,d и e
} str_ram={'w',"Hello",7,2}; 	// инициализируем структуру x, причем
// переменная e осталась
// неопределенной (для нее нет значения
// в фигурных скобках)

/* Определим функцию result */
/* Параметром функции является указатель point на
   структуру типа structure_ram */
/* Т.к. функция использует переменные, объявленные в структуре,
   тип функции будет такой же, как тип структуры structure_ram */
/* Отсюда получается такая запись, где сначала идет тип
   struct structure_ram, затем указатель (*) на функцию result,
   аргументом которой является выражение в скобках -
   указатель на структуру structure_ram */

struct structure_ram *result(struct structure_ram *point)

/* Теперь определим саму функцию result */

{
/* элемент c=элемент a + элемент b */
point->e=point->c + point->d;	// вычисляем значение e через указатели
point->a='f'; 			// Для примера переопределим значение
// символьной переменной a. Ее начальное
// значение было 'w'

/* возвращаем указатель структуры */
return point;
}

/* Основная функция программы */

void main(void)
{
int i; 			// Объявляем целую переменную i
char x,y; 			// Объявляем символьные переменные x,y

/* Вычисления через указатели */
/* str_ram->e=str_ram->c + str_ram->d */
/* i=str_ram->e */

/* Для этого вызываем функцию result, аргументом которой
   делаем адрес структуры str_ram (& - значит адрес). По указателю,
   который возвращает функция, определяем тип переменной e, значение
   которой вычисляется в функции result */

i=result(&str_ram)->e; 		// Получим i=7+2=9

/* Аналогично, воспользовавшись указателем, который возвращает
   функция result, можно определить и символьные переменные */   

x=result(&str_ram)->a; 		// Получим x='f', т.к. значение
// символьной переменной a переопределено
// в функции result
y=result(&str_ram)->b[3]; 	// Получим y='l', четвертый символ строки
// "Hello", т.к. первый символ b[0]='H',
// второй b[1]='e', третий b[2]='l'
}
